#ifndef MNM_PARAMS_H__
#define MNM_PARAMS_H__

class MNMCallback {
};

extern uint8_t monomachine_sysex_hdr[5];

#define MNM_GLOBAL_MESSAGE_ID   0x50
#define MNM_GLOBAL_REQUEST_ID   0x51
#define MNM_KIT_MESSAGE_ID      0x52
#define MNM_KIT_REQUEST_ID      0x53
#define MNM_PATTERN_MESSAGE_ID  0x67
#define MNM_PATTERN_REQUEST_ID  0x68
#define MNM_SONG_MESSAGE_ID     0x69
#define MNM_SONG_REQUEST_ID     0x6a

#define MNM_SET_CURRENT_KIT_NAME_ID 0x55

#define MNM_SAVE_KIT_ID  0x59
#define MNM_SAVE_SONG_ID 0x6d

#define MNM_STATUS_REQUEST_ID  0x70
#define MNM_SET_STATUS_ID      0x71
#define MNM_STATUS_RESPONSE_ID 0x72

#define MNM_CURRENT_GLOBAL_SLOT_REQUEST         0x01
#define MNM_CURRENT_KIT_REQUEST                 0x02
#define MNM_CURRENT_PATTERN_REQUEST             0x04
#define MNM_CURRENT_SONG_REQUEST                0x08
#define MNM_CURRENT_SEQUENCER_MODE_REQUEST      0x10
#define MNM_CURRENT_AUDIO_MODE_REQUEST          0x20
#define MNM_CURRENT_SEQUENCER_MODE_MODE_REQUEST 0x21
#define MNM_CURRENT_AUDIO_TRACK_REQUEST         0x22
#define MNM_CURRENT_MIDI_TRACK_REQUEST          0x23 

#define MNM_LOAD_GLOBAL_ID      0x56
#define MNM_LOAD_PATTERN_ID     0x57
#define MNM_LOAD_KIT_ID         0x58
#define MNM_LOAD_SONG_ID        0x6c

#define MNM_LOAD_MACHINE_ID     0x5b

#define MNM_SET_TRACK_ROUTING_ID 0x5c

#define MNM_BUS_AB 0x01
#define MNM_BUS_CD 0x02
#define MNM_BUS_EF 0x04

#define MNM_INPUT_NEIGHBOR 0x00
#define MNM_INPUT_INPA     0x01
#define MNM_INPUT_INPB     0x02
#define MNM_INPUT_INPAB    0x03
#define MNM_INPUT_BUS_AB   0x04
#define MNM_INPUT_BUS_CD   0x05
#define MNM_INPUT_BUS_EF   0x06

#define MNM_DIGIPRO_WAVEFORM_MESSAGE_ID 0x5d
#define MNM_DIGIPRO_WAVEFORM_REQUEST_ID 0x5e

#define MNM_SET_TEMPO_ID 0x61

#define MNM_GND_GND_MODEL    0
#define MNM_GND_SIN_MODEL    1
#define MNM_GND_NOIS_MODEL   2

#define MNM_SID_6581_MODEL   3

#define MNM_SWAVE_SAW_MODEL  4
#define MNM_SWAVE_PULS_MODEL 5
#define MNM_SWAVE_ENS_MODEL  14

#define MNM_DPRO_WAVE_MODEL  6
#define MNM_DPRO_BBOX_MODEL  7
#define MNM_DPRO_DDRW_MODEL  32
#define MNM_DPRO_DENS_MODEL  33

#define MNM_FM_STAT_MODEL    8
#define MNM_FM_PAR_MODEL     9
#define MNM_FM_DYN_MODEL     10

#define MNM_VO_VO6_MODEL     11

#define MNM_FX_THRU_MODEL    12
#define MNM_FX_REVERB_MODEL  13
#define MNM_FX_CHORUS_MODEL  15
#define MNM_FX_DYNAMIX_MODEL 16
#define MNM_FX_RINGMOD_MODEL 17

#define MNM_SWAVE_SAW_UNIL   0x00
#define MNM_SWAVE_SAW_UNIW   0x01
#define MNM_SWAVE_SAW_UNIX   0x02
#define MNM_SWAVE_SAW_SUBX   0x04
#define MNM_SWAVE_SAW_SUB1   0x05
#define MNM_SWAVE_SAW_SUB2   0x06
#define MNM_SWAVE_SAW_TUNE   0x07

#define MNM_SWAVE_PULS_UNIL   0x00
#define MNM_SWAVE_PULS_UNIW   0x01
#define MNM_SWAVE_PULS_SUB1   0x02
#define MNM_SWAVE_PULS_SUB2   0x03
#define MNM_SWAVE_PULS_PW     0x04
#define MNM_SWAVE_PULS_PWAD   0x05
#define MNM_SWAVE_PULS_PWRS   0x06
#define MNM_SWAVE_PULS_TUNE   0x07

#define MNM_SWAVE_ENS_PCH2   0x00
#define MNM_SWAVE_ENS_PCH3   0x01
#define MNM_SWAVE_ENS_PCH4   0x02
#define MNM_SWAVE_ENS_WAVE   0x03
#define MNM_SWAVE_ENS_PW     0x04
#define MNM_SWAVE_ENS_CHRL   0x05
#define MNM_SWAVE_ENS_CHRW   0x06
#define MNM_SWAVE_ENS_TUNE   0x07

#define MNM_SID_6581_PW     0x00
#define MNM_SID_6581_PWAD   0x01
#define MNM_SID_6581_PWRS   0x02
#define MNM_SID_6581_WAVE   0x03
#define MNM_SID_6581_MOD    0x04
#define MNM_SID_6581_MSRC   0x05
#define MNM_SID_6581_MFRQ   0x06
#define MNM_SID_6581_TUNE   0x07

#define MNM_DPRO_WAVE_WAVE   0x00
#define MNM_DPRO_WAVE_WP     0x01
#define MNM_DPRO_WAVE_WPM    0x02
#define MNM_DPRO_WAVE_WPRS   0x03
#define MNM_DPRO_WAVE_SYNC   0x04
#define MNM_DPRO_WAVE_SFRQ   0x05
#define MNM_DPRO_WAVE_TUNE   0x07

#define MNM_DPRO_BBOX_PTCH   0x00
#define MNM_DPRO_BBOX_STRT   0x01
#define MNM_DPRO_BBOX_RTRG   0x04
#define MNM_DPRO_BBOX_RTIM   0x05

#define MNM_DPRO_BBOX_BD1      C3
#define MNM_DPRO_BBOX_SD1      CS3
#define MNM_DPRO_BBOX_TOM1     D3
#define MNM_DPRO_BBOX_TOM2     DS3
#define MNM_DPRO_BBOX_BONGO    E3
#define MNM_DPRO_BBOX_CLAP     F3
#define MNM_DPRO_BBOX_RIMSHOT  FS3
#define MNM_DPRO_BBOX_COWBELL  G3
#define MNM_DPRO_BBOX_CH       FS3
#define MNM_DPRO_BBOX_OH       A3
#define MNM_DPRO_BBOX_RIDE     AS3
#define MNM_DPRO_BBOX_CRASH    B3
#define MNM_DPRO_BBOX_BD2      C4
#define MNM_DPRO_BBOX_SD2      CS4
#define MNM_DPRO_BBOX_TIMBALE  D4
#define MNM_DPRO_BBOX_AGGOBELL DS4
#define MNM_DPRO_BBOX_TIMPANI  E4
#define MNM_DPRO_BBOX_SNAP     F4
#define MNM_DPRO_BBOX_WOOD     FS4
#define MNM_DPRO_BBOX_TRIANGLE G4
#define MNM_DPRO_BBOX_SHAKER   FS4
#define MNM_DPRO_BBOX_MARACAS  A4
#define MNM_DPRO_BBOX_WHISTLE  AS4
#define MNM_DPRO_BBOX_BLIPP    B4

#define MNM_DPRO_DDRW_WAV1   0x00
#define MNM_DPRO_DDRW_MIX    0x01
#define MNM_DPRO_DDRW_WAV2   0x02
#define MNM_DPRO_DDRW_TIME   0x03
#define MNM_DPRO_DDRW_BR1    0x04
#define MNM_DPRO_DDRW_WID    0x05
#define MNM_DPRO_DDRW_BR2    0x06
#define MNM_DPRO_DDRW_TUNE   0x07

#define MNM_DPRO_DENS_PCH2   0x00
#define MNM_DPRO_DENS_PCH3   0x01
#define MNM_DPRO_DENS_PCH4   0x02
#define MNM_DPRO_DENS_WAVE   0x03
#define MNM_DPRO_DENS_CHRL   0x05
#define MNM_DPRO_DENS_CHRW   0x06
#define MNM_DPRO_DENS_TUNE   0x07

#define MNM_FM_STAT_1FRQ   0x00
#define MNM_FM_STAT_1FIN   0x01
#define MNM_FM_STAT_1ENV   0x02
#define MNM_FM_STAT_1FB    0x03
#define MNM_FM_STAT_2FRQ   0x04
#define MNM_FM_STAT_2VOL   0x05
#define MNM_FM_STAT_TONE   0x06
#define MNM_FM_STAT_TUNE   0x07

#define MNM_FM_PAR_1FRQ   0x00
#define MNM_FM_PAR_1ENV   0x01
#define MNM_FM_PAR_2FRQ   0x02
#define MNM_FM_PAR_2ENV   0x03
#define MNM_FM_PAR_3FRQ   0x04
#define MNM_FM_PAR_3ENV   0x05
#define MNM_FM_PAR_TONE   0x06
#define MNM_FM_PAR_TUNE   0x07

#define MNM_FM_DYN_1FRQ   0x00
#define MNM_FM_DYN_1FEN   0x01
#define MNM_FM_DYN_1VOL   0x02
#define MNM_FM_DYN_1VEN   0x03
#define MNM_FM_DYN_2FRQ   0x04
#define MNM_FM_DYN_2ENV   0x05
#define MNM_FM_DYN_2FB    0x06
#define MNM_FM_DYN_TUNE   0x07

#define MNM_VO_VO6_VOC1   0x00
#define MNM_VO_VO6_VOC2   0x01
#define MNM_VO_VO6_V_SW   0x02
#define MNM_VO_VO6_VOIC   0x03
#define MNM_VO_VO6_CONS   0x04
#define MNM_VO_VO6_CLEN   0x05
#define MNM_VO_VO6_VCOL   0x06
#define MNM_VO_VO6_TUNE   0x07

#define MNM_GND_SIN_TUNE   0x07

#define MNM_GND_NOIS_ST     0x00
#define MNM_GND_NOIS_RED    0x01
#define MNM_GND_NOIS_TUNE   0x07

#define MNM_FX_THRU_INP   0x07

#define MNM_FX_REVERB_DEC   0x00
#define MNM_FX_REVERB_DAMP  0x01
#define MNM_FX_REVERB_GATE  0x02
#define MNM_FX_REVERB_MIX   0x03
#define MNM_FX_REVERB_HP    0x04
#define MNM_FX_REVERB_LP    0x05
#define MNM_FX_REVERB_INP   0x07

#define MNM_FX_CHORUS_DEL    0x00
#define MNM_FX_CHORUS_DEP    0x01
#define MNM_FX_CHORUS_SPD    0x02
#define MNM_FX_CHORUS_MIX    0x03
#define MNM_FX_CHORUS_FB     0x04
#define MNM_FX_CHORUS_WID    0x05
#define MNM_FX_CHORUS_LP     0x06
#define MNM_FX_CHORUS_INP    0x07

#define MNM_FX_DYNAMIX_ATK    0x00
#define MNM_FX_DYNAMIX_REL    0x01
#define MNM_FX_DYNAMIX_THRS   0x02
#define MNM_FX_DYNAMIX_MIX    0x03
#define MNM_FX_DYNAMIX_RAT    0x04
#define MNM_FX_DYNAMIX_GAIN   0x05
#define MNM_FX_DYNAMIX_RMS    0x06
#define MNM_FX_DYNAMIX_INP    0x07

#define MNM_FX_RINGMOD_WAVE  0x00
#define MNM_FX_RINGMOD_EXT   0x01
#define MNM_FX_RINGMOD_MIX   0x03
#define MNM_FX_RINGMOD_INP   0x07

#define MNM_LFO_PAGE_PTCH 7
#define MNM_LFO_PAGE_SYNTH 21
#define MNM_LFO_PAGE_AMP 35
#define MNM_LFO_PAGE_FILT 49
#define MNM_LFO_PAGE_EFFX 63
#define MNM_LFO_PAGE_LFO1 78
#define MNM_LFO_PAGE_LFO2 92
#define MNM_LFO_PAGE_LFO3 106
#define MNM_LFO_PAGE_MIDI 120

#define MNM_LFO_PTCH_1_12 8
#define MNM_LFO_PTCH_2_12 24
#define MNM_LFO_PTCH_7_12 40
#define MNM_LFO_PTCH_1OCT 56
#define MNM_LFO_PTCH_2OCT 72
#define MNM_LFO_PTCH_4OCT 88
#define MNM_LFO_PTCH_8OCT 104
#define MNM_LFO_PTCH_16OC 120

#define MNM_LFO_WAVE_TRI 5
#define MNM_LFO_WAVE_ITRI 16
#define MNM_LFO_WAVE_SAW 28
#define MNM_LFO_WAVE_ISAW 39
#define MNM_LFO_WAVE_SQR 51
#define MNM_LFO_WAVE_ISQR 63
#define MNM_LFO_WAVE_EXP 74
#define MNM_LFO_WAVE_IEXP 86
#define MNM_LFO_WAVE_RMP 98
#define MNM_LFO_WAVE_IRMP 109
#define MNM_LFO_WAVE_RND 121

#define MNM_LFO_MULT_1X 9
#define MNM_LFO_MULT_2X 27
#define MNM_LFO_MULT_4X 45
#define MNM_LFO_MULT_8X 63
#define MNM_LFO_MULT_16X 82
#define MNM_LFO_MULT_32X 100
#define MNM_LFO_MULT_64X 118

#define MNM_LFO_TRIG_FREE 0x00
#define MNM_LFO_TRIG_TRIG 0x01
#define MNM_LFO_TRIG_HOLD 0x02
#define MNM_LFO_TRIG_ONE  0x03
#define MNM_LFO_TRIG_HALF 0x04

#define MNM_MODEL_AMP_ATK  0x08
#define MNM_MODEL_AMP_HOLD 0x09
#define MNM_MODEL_AMP_DEC  0x0a
#define MNM_MODEL_AMP_REL  0x0b
#define MNM_MODEL_AMP_DIST 0x0c
#define MNM_MODEL_AMP_VOL  0x0d
#define MNM_MODEL_AMP_PAN  0x0e
#define MNM_MODEL_AMP_PORT 0x0f

#define MNM_MODEL_FILT_BASE 0x10
#define MNM_MODEL_FILT_WDTH 0x11
#define MNM_MODEL_FILT_HPQ  0x12
#define MNM_MODEL_FILT_LPQ  0x13
#define MNM_MODEL_FILT_ATK  0x14
#define MNM_MODEL_FILT_DEC  0x15
#define MNM_MODEL_FILT_BOFS 0x16
#define MNM_MODEL_FILT_WOFS 0x17

#define MNM_MODEL_FX_EQF    0x18
#define MNM_MODEL_FX_EQG    0x19
#define MNM_MODEL_FX_SRR    0x1a
#define MNM_MODEL_FX_DTIM   0x1b
#define MNM_MODEL_FX_DSND   0x1c
#define MNM_MODEL_FX_DFB    0x1d
#define MNM_MODEL_FX_DBAS   0x1e
#define MNM_MODEL_FX_DWID   0x1f

#define MNM_MODEL_LFO1_PAGE 0x20
#define MNM_MODEL_LFO1_DEST 0x21
#define MNM_MODEL_LFO1_TRIG 0x22
#define MNM_MODEL_LFO1_WAVE 0x23
#define MNM_MODEL_LFO1_MULT 0x24
#define MNM_MODEL_LFO1_SPD  0x25
#define MNM_MODEL_LFO1_INTL 0x26
#define MNM_MODEL_LFO1_DPTH 0x27

#define MNM_MODEL_LFO2_PAGE 0x28
#define MNM_MODEL_LFO2_DEST 0x29
#define MNM_MODEL_LFO2_TRIG 0x2a
#define MNM_MODEL_LFO2_WAVE 0x2b
#define MNM_MODEL_LFO2_MULT 0x2c
#define MNM_MODEL_LFO2_SPD  0x2d
#define MNM_MODEL_LFO2_INTL 0x2e
#define MNM_MODEL_LFO2_DPTH 0x2f

#define MNM_MODEL_LFO3_PAGE 0x30
#define MNM_MODEL_LFO3_DEST 0x31
#define MNM_MODEL_LFO3_TRIG 0x32
#define MNM_MODEL_LFO3_WAVE 0x33
#define MNM_MODEL_LFO3_MULT 0x34
#define MNM_MODEL_LFO3_SPD  0x35
#define MNM_MODEL_LFO3_INTL 0x36
#define MNM_MODEL_LFO3_DPTH 0x37

#endif /* MNM_PARAMS_H__ */
